home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 January / Macworld (1998-01).dmg / Shareware World / Comms & Internet / HTML mode 2.0 etc. / htmlExtensions.tcl < prev    next >
Text File  |  1997-09-22  |  25KB  |  491 lines

  1. ## -*-Tcl-*-
  2.  # ###################################################################
  3.  #  HTML mode - tools for editing HTML documents
  4.  # 
  5.  #  FILE: "htmlExtensions.tcl"
  6.  #                                    created: 97-01-25 23.43.38 
  7.  #                                last update: 97-09-21 17.49.23 
  8.  #  Author: Johan Linde
  9.  #  E-mail: <jl@theophys.kth.se>
  10.  #     www: <http://bach.theophys.kth.se/~jl/Alpha.html>
  11.  #  
  12.  # Version: 2.0
  13.  # 
  14.  # Copyright 1996, 1997 by Johan Linde
  15.  #  
  16.  # This software may be used freely, and distributed freely, as long as the 
  17.  # receiver is not obligated in any way by receiving it.
  18.  #  
  19.  # If you make improvements to this file, please share them!
  20.  # 
  21.  # ###################################################################
  22.  ##
  23. proc htmlExtensions.tcl {} {}
  24.  
  25. #
  26. # htmlElemAttrRequired: the per-element lists of all required attributes
  27. # htmlElemAttrOptional: the per-element lists of all optional attributes
  28. # htmlElemAttrChoices: element-specific attribute completions
  29. # htmlElemAttrNumber: the per-element list of attributes which are numbers.
  30. # htmlElemEventHandler: the per-element list of JavaScript's event handlers.
  31. # htmlElemAttrUsed: the per-element list of elements asked for in the status bar.
  32. # htmlElemHideNetscape: Netscape only attributes.
  33. # htmlElemHideIE: Internet Explorer only attributes.
  34. #
  35. # htmlElemAttrOptional has to be defined for every element for everything
  36. # to work.
  37.  
  38. set htmlElemAttrOptional1(HTML) {}
  39. set htmlElemAttrOptional1(HEAD) {}
  40. set htmlElemAttrOptional1(TITLE) {}
  41. set htmlElemAttrOptional1(BODY)    {BACKGROUND= BGPROPERTIES= BGCOLOR= TEXT= LINK= VLINK= ALINK=
  42. LEFTMARGIN= TOPMARGIN=}
  43. set htmlElemAttrChoices1(BODY) {BGPROPERTIES=FIXED}
  44. set htmlElemAttrNumber1(BODY) {LEFTMARGIN=0:i:n TOPMARGIN=0:i:n}
  45. set htmlElemEventHandler1(BODY)    {onLoad= onUnload=}
  46. htmlSetAttrUsed ""     BODY {BACKGROUND= BGCOLOR= TEXT= LINK= VLINK=}
  47. set htmlElemHideIE(BODY) {BGPROPERTIES= LEFTMARGIN= TOPMARGIN=}
  48.  
  49. set htmlElemAttrOptional1(STYLE) {TYPE=}
  50. set htmlElemAttrOptional1(SPAN) {}
  51. htmlSetAttrUsed "" SPAN {CLASS= ID= STYLE=}
  52.  
  53. set htmlElemAttrOptional1(H1)    {ALIGN= }
  54. set htmlElemAttrChoices1(H1)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  55. htmlSetAttrUsed ""     H1    {ALIGN=}
  56. set htmlElemAttrOptional1(H2)    {ALIGN= }
  57. set htmlElemAttrChoices1(H2)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  58. htmlSetAttrUsed ""     H2    {ALIGN=}
  59. set htmlElemAttrOptional1(H3)    {ALIGN= }
  60. set htmlElemAttrChoices1(H3)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  61. htmlSetAttrUsed ""     H3    {ALIGN=}
  62. set htmlElemAttrOptional1(H4)    {ALIGN= }
  63. set htmlElemAttrChoices1(H4)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  64. htmlSetAttrUsed ""     H4    {ALIGN=}
  65. set htmlElemAttrOptional1(H5)    {ALIGN= }
  66. set htmlElemAttrChoices1(H5)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  67. htmlSetAttrUsed ""     H5    {ALIGN=}
  68. set htmlElemAttrOptional1(H6)    {ALIGN= }
  69. set htmlElemAttrChoices1(H6)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  70. htmlSetAttrUsed ""     H6    {ALIGN=}
  71.  
  72. set htmlElemAttrOptional1(P)    {ALIGN= }
  73. set htmlElemAttrChoices1(P)        {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  74. htmlSetAttrUsed ""     P    {ALIGN=}
  75. set htmlElemAttrOptional1(BLOCKQUOTE) {}
  76. set htmlElemAttrOptional1(DIV)    {ALIGN= }
  77. set htmlElemAttrChoices1(DIV)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  78. htmlSetAttrUsed ""        DIV    {ALIGN=}
  79. set htmlElemAttrOptional1(ADDRESS) {}
  80. set htmlElemAttrOptional1(CENTER) {}
  81. set htmlElemAttrOptional1(PRE)    {WIDTH= }
  82. set htmlElemAttrNumber1(PRE)     {WIDTH=1:i:n}
  83. set htmlElemAttrRequired1(MULTICOL)    {COLS=}
  84. set htmlElemAttrOptional1(MULTICOL)    {GUTTER= WIDTH=}
  85. set htmlElemAttrNumber1(MULTICOL)    {COLS=2:i:n GUTTER=0:i:n WIDTH=1:i:%}
  86. htmlSetAttrUsed "" MULTICOL {COLS= GUTTER= WIDTH=}
  87. set htmlElemAttrRequired1(SPACER)    {TYPE=}
  88. set htmlElemAttrOptional1(SPACER)    {SIZE= WIDTH= HEIGHT= ALIGN=}
  89. set htmlElemAttrNumber1(SPACER)    {SIZE=1:i:n WIDTH=1:i:% HEIGHT=1:i:%}
  90. set htmlElemAttrChoices1(SPACER) {TYPE=HORIZONTAL TYPE=VERTICAL TYPE=BLOCK ALIGN=TOP 
  91. ALIGN=MIDDLE ALIGN=BOTTOM ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE}
  92. htmlSetAttrUsed "" SPACER {TYPE= SIZE= WIDTH= HEIGHT= ALIGN=}
  93. set htmlElemAttrOptional1(BR)    {CLEAR= }
  94. set htmlElemAttrChoices1(BR)    {CLEAR=ALL CLEAR=LEFT CLEAR=RIGHT CLEAR=NONE}
  95. set htmlElemAttrOptional1(HR)    {ALIGN= SIZE= WIDTH= COLOR= NOSHADE}
  96. set htmlElemAttrChoices1(HR)    {ALIGN=LEFT ALIGN=RIGHT ALIGN=CENTER}
  97. set htmlElemAttrNumber1(HR)     {SIZE=1:i:n WIDTH=1:i:%}
  98. set htmlElemHideIE(HR)    {COLOR=}
  99. set htmlElemAttrOptional1(NOBR) {}
  100. set htmlElemAttrOptional1(WBR)     {}
  101.  
  102. set htmlElemAttrOptional1(FONT)    {SIZE= COLOR= FACE= POINT-SIZE=}
  103. set htmlElemAttrNumber1(FONT)    {SIZE=1:7:n POINT-SIZE=1:i:n}
  104. set htmlElemHideNetscape(FONT) {POINT-SIZE=}
  105. htmlSetAttrUsed ""        FONT    {SIZE=}
  106. set htmlElemAttrRequired1(BASEFONT)    {}
  107. set htmlElemAttrOptional1(BASEFONT) {SIZE= COLOR= FACE=}
  108. set htmlElemAttrNumber1(BASEFONT)    {SIZE=1:7:n}
  109. htmlSetAttrUsed "" BASEFONT {SIZE=}
  110. set htmlElemAttrOptional1(MARQUEE) {BEHAVIOR= DIRECTION= ALIGN= LOOP= WIDTH= HEIGHT=
  111. HSPACE= VSPACE= BGCOLOR= SCROLLAMOUNT= SCROLLDELAY=}
  112. set htmlElemAttrNumber1(MARQUEE) {LOOP=-1:i:n HEIGHT=1:i:% WIDTH=1:i:% HSPACE=0:i:n
  113. VSPACE=0:i:n SCROLLAMOUNT=1:i:n SCROLLDELAY=1:i:n}
  114. set htmlElemAttrChoices1(MARQUEE) {BEHAVIOR=SLIDE BEHAVIOR=ALTERNATE BEHAVIOR=SCROLL
  115. DIRECTION=RIGHT DIRECTION=LEFT ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM}
  116. htmlSetAttrUsed "" MARQUEE {BEHAVIOR= DIRECTION= LOOP=}
  117. set htmlElemAttrOptional1(B) {}
  118. set htmlElemAttrOptional1(I) {}
  119. set htmlElemAttrOptional1(STRIKE) {}
  120. set htmlElemAttrOptional1(U) {}
  121. set htmlElemAttrOptional1(SUB) {}
  122. set htmlElemAttrOptional1(SUP) {}
  123. set htmlElemAttrOptional1(BIG) {}
  124. set htmlElemAttrOptional1(SMALL) {}
  125. set htmlElemAttrOptional1(EM) {}
  126. set htmlElemAttrOptional1(STRONG) {}
  127. set htmlElemAttrOptional1(DFN) {}
  128. set htmlElemAttrOptional1(CODE) {}
  129. set htmlElemAttrOptional1(VAR) {}
  130. set htmlElemAttrOptional1(CITE) {}
  131. set htmlElemAttrOptional1(KBD) {}
  132. set htmlElemAttrOptional1(TT) {}
  133. set htmlElemAttrOptional1(SAMP) {}
  134. set htmlElemAttrOptional1(BLINK) {}
  135.  
  136. set htmlElemAttrOptional1(A)    {HREF= NAME= TARGET= REL= REV=  TITLE= }
  137. set htmlElemEventHandler1(A)    {onClick= onMouseOver= onMouseOut= onMouseDown= onMouseUp=}
  138. htmlSetAttrUsed ""        A    {HREF= NAME=}
  139. set htmlElemAttrRequired1(IMG)    {SRC=}
  140. set htmlElemAttrOptional1(IMG)    {LOWSRC= WIDTH= HEIGHT=  BORDER= 
  141. ALIGN= ALT= HSPACE= VSPACE= USEMAP= ISMAP DYNSRC= LOOP= START= CONTROLS}
  142. set htmlElemAttrChoices1(IMG)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  143. ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE START=FILEOPEN
  144. START=MOUSEOVER}
  145. set htmlElemAttrNumber1(IMG) {BORDER=0:i:n WIDTH=1:i:% HEIGHT=1:i:%
  146. HSPACE=0:i:n VSPACE=0:i:n LOOP=-1:i:n}
  147. set htmlElemEventHandler1(IMG)    {onAbort= onError= onLoad=}
  148. htmlSetAttrUsed ""        IMG    {SRC= WIDTH= HEIGHT= ALIGN= ALT=}
  149. set htmlElemHideNetscape(IMG) {LOWSRC=}
  150. set htmlElemHideIE(IMG)    {CONTROLS DYNSRC= LOOP= START=}
  151. set htmlElemAttrOptional1(OBJECT) {CLASSID= CODEBASE= CODETYPE= DATA= NAME= TYPE= STANDBY=
  152. ALIGN= BORDER= WIDTH= HEIGHT= HSPACE= VSPACE= USEMAP= DECLARE SHAPES}
  153. set htmlElemAttrNumber1(OBJECT) {WIDTH=1:i:n HEIGHT=1:i:n HSPACE=0:i:n VSPACE=0:i:n BORDER=0:i:n}
  154. set htmlElemAttrChoices1(OBJECT) {ALIGN=TEXTTOP ALIGN=MIDDLE ALIGN=TEXTMIDDLE ALIGN=TEXTBOTTOM 
  155. ALIGN=BASELINE ALIGN=LEFT ALIGN=CENTER ALIGN=RIGHT}
  156. htmlSetAttrUsed "" OBJECT {CLASSID= CODETYPE= DATA= TYPE= WIDTH= HEIGHT=}
  157. set htmlElemAttrRequired1(BGSOUND) {SRC=}
  158. set htmlElemAttrOptional1(BGSOUND) {LOOP=}
  159. set htmlElemAttrNumber1(BGSOUND) {LOOP=-1:i:n}
  160. htmlSetAttrUsed "" BGSOUND {SRC= LOOP=}
  161.  
  162. set htmlElemAttrRequired1(EMBED)    {SRC= WIDTH= HEIGHT=}
  163. set htmlElemAttrOptional1(EMBED)    {HSPACE= VSPACE= ALIGN=}
  164. set htmlElemAttrNumber1(EMBED) {WIDTH=1:i:n HEIGHT=1:i:n HSPACE=1:i:n VSPACE=1:i:n}
  165. set htmlElemAttrChoices1(EMBED)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  166. ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE}
  167. set htmlElemAttrOptional1(NOEMBED) {}
  168. set htmlElemAttrRequired1(LIVEAUDIO) {SRC= WIDTH= HEIGHT=}
  169. set htmlElemAttrOptional1(LIVEAUDIO)    {HSPACE= VSPACE= ALIGN= AUTOSTART= LOOP=}
  170. set htmlElemAttrNumber1(LIVEAUDIO) {WIDTH=1:i:n HEIGHT=1:i:n HSPACE=1:i:n VSPACE=1:i:n}
  171. set htmlElemAttrChoices1(LIVEAUDIO)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  172. ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE 
  173. AUTOSTART=TRUE AUTOSTART=FALSE LOOP=TRUE LOOP=FALSE}
  174. htmlSetAttrUsed "" LIVEAUDIO {SRC= WIDTH= HEIGHT= AUTOSTART= LOOP=}
  175. set htmlElemAttrRequired1(LIVEVIDEO) {SRC= WIDTH= HEIGHT=}
  176. set htmlElemAttrOptional1(LIVEVIDEO)    {HSPACE= VSPACE= ALIGN= AUTOSTART= LOOP= CONTROLS=}
  177. set htmlElemAttrNumber1(LIVEVIDEO) {WIDTH=1:i:n HEIGHT=1:i:n HSPACE=1:i:n VSPACE=1:i:n}
  178. set htmlElemAttrChoices1(LIVEVIDEO)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  179. ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE 
  180. AUTOSTART=TRUE AUTOSTART=FALSE LOOP=TRUE LOOP=FALSE CONTROLS=TRUE CONTROLS=FALSE}
  181. htmlSetAttrUsed "" LIVEVIDEO {SRC= WIDTH= HEIGHT= AUTOSTART= LOOP= CONTROLS=}
  182. set htmlElemAttrRequired1([list QUICKTIME MOVIE])    {SRC= }
  183. set htmlElemAttrOptional1([list QUICKTIME MOVIE])    {WIDTH= HEIGHT= HSPACE= VSPACE= ALIGN=
  184. HIDDEN= AUTOPLAY= CONTROLLER= LOOP= PLAYEVERYFRAME= HREF= TARGET= PLUGINSPAGE=}
  185. set htmlElemAttrNumber1([list QUICKTIME MOVIE]) {WIDTH=1:i:n HEIGHT=1:i:n HSPACE=1:i:n VSPACE=1:i:n}
  186. set htmlElemAttrChoices1([list QUICKTIME MOVIE])    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  187. ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE HIDDEN=TRUE HIDDEN=FALSE
  188. AUTOPLAY=TRUE AUTOPLAY=FALSE CONTROLLER=TRUE CONTROLLER=FALSE LOOP=TRUE LOOP=FALSE 
  189. LOOP=PALINDROME PLAYEVERYFRAME=TRUE PLAYEVERYFRAME=FALSE}
  190. htmlSetAttrUsed "" "QUICKTIME MOVIE" {SRC= WIDTH= HEIGHT= HIDDEN= AUTOPLAY= CONTROLLER= LOOP= 
  191. PLAYEVERYFRAME=}
  192. set htmlElemAttrRequired1([list QUICKTIME VR])    {SRC= WIDTH= HEIGHT=}
  193. set htmlElemAttrOptional1([list QUICKTIME VR])    {HSPACE= VSPACE= ALIGN= PAN= TILT= FOV=
  194. NODE= CORRECTION= PLUGINSPAGE=}
  195. set htmlElemAttrNumber1([list QUICKTIME VR]) {WIDTH=1:i:n HEIGHT=1:i:n 
  196. HSPACE=1:i:n VSPACE=1:i:n PAN=0:360:n TILT=-360:360:n FOV=-360:360:n NODE=0:i:n}
  197. set htmlElemAttrChoices1([list QUICKTIME VR])    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  198. ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE
  199. CORRECTION=NONE CORRECTION=PARTIAL CORRECTION=FULL}
  200. htmlSetAttrUsed "" "QUICKTIME VR" {SRC= WIDTH= HEIGHT= PAN= TILT= FOV=
  201. NODE= CORRECTION=}
  202. set htmlElemAttrRequired1(REALAUDIO)    {SRC= WIDTH= HEIGHT=}
  203. set htmlElemAttrOptional1(REALAUDIO)    {HSPACE= VSPACE= ALIGN= CONTROLS= AUTOSTART=
  204. NOLABELS= CONSOLE=}
  205. set htmlElemAttrNumber1(REALAUDIO) {WIDTH=1:i:n HEIGHT=1:i:n HSPACE=1:i:n VSPACE=1:i:n}
  206. set htmlElemAttrChoices1(REALAUDIO)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  207. ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE
  208. CONTROLS=ALL CONTROLS=CONTROLPANEL CONTROLS=INFOVOLUMEPANEL CONTROLS=INFOPANEL
  209. CONTROLS=STATUSBAR CONTROLS=PLAYBUTTON CONTROLS=STOPBUTTON CONTROLS=VOLUMESLIDER
  210. CONTROLS=POSITIONSLIDER CONTROLS=POSITIONFIELD CONTROLS=STATUSFIELD
  211. AUTOSTART=TRUE AUTOSTART=FALSE NOLABELS=TRUE NOLABELS=FALSE}
  212. htmlSetAttrUsed "" REALAUDIO {SRC= WIDTH= HEIGHT= CONTROLS= AUTOSTART=
  213. NOLABELS= CONSOLE=}
  214.     
  215. set htmlElemAttrOptional1(UL)    {TYPE= COMPACT}
  216. set htmlElemAttrChoices1(UL)    {TYPE=DISC TYPE=CIRCLE TYPE=SQUARE}
  217. set htmlElemAttrOptional1([list LI IN UL])    {TYPE=}
  218. set htmlElemAttrChoices1([list LI IN UL])    {TYPE=DISC TYPE=CIRCLE TYPE=SQUARE}
  219. set htmlElemAttrOptional1(OL)    {TYPE= START= COMPACT}
  220. set htmlElemAttrChoices1(OL)    {TYPE=A TYPE=a TYPE=I TYPE=i TYPE=1}
  221. set htmlElemAttrNumber1(OL)    {START=1:i:n}
  222. set htmlElemAttrOptional1([list LI IN OL])    {TYPE= VALUE=}
  223. set htmlElemAttrNumber1([list LI IN OL])    {VALUE=1:i:n}
  224. set htmlElemAttrChoices1([list LI IN OL])    {TYPE=A TYPE=a TYPE=I TYPE=i TYPE=1}
  225. set htmlElemAttrOptional1(DIR) {COMPACT}
  226. set htmlElemAttrOptional1(MENU) {COMPACT}
  227. set htmlElemAttrOptional1(LI) {}
  228. set htmlElemAttrOptional1(DL) {COMPACT}
  229. set htmlElemAttrOptional1(DT) {}
  230. set htmlElemAttrOptional1(DD)    {}
  231.  
  232. set htmlElemAttrOptional1(FORM)    {ACTION= METHOD= ENCTYPE= TARGET= NAME=}
  233. set htmlElemAttrChoices1(FORM)    {METHOD=POST METHOD=GET}
  234. set htmlElemEventHandler1(FORM)    {onReset= onSubmit=}
  235. htmlSetAttrUsed ""        FORM    {ACTION= METHOD= }
  236. set htmlElemAttrRequired1(TEXT)    {NAME=}
  237. set htmlElemAttrOptional1(TEXT)    {VALUE= SIZE= MAXLENGTH=}
  238. set htmlElemAttrNumber1(TEXT)    {SIZE=1:i:n MAXLENGTH=1:i:n}
  239. set htmlElemEventHandler1(TEXT)    {onBlur= onChange= onFocus= onSelect= onKeyDown= onKeyPress= onKeyUp=}
  240. htmlSetAttrUsed ""     TEXT    {NAME= VALUE= SIZE= MAXLENGTH=}
  241. set htmlElemAttrRequired1(CHECKBOX)    {NAME= VALUE=}
  242. set htmlElemAttrOptional1(CHECKBOX)    {CHECKED}
  243. set htmlElemEventHandler1(CHECKBOX)    {onClick=}
  244. htmlSetAttrUsed ""     CHECKBOX    {NAME= VALUE= CHECKED}
  245. set htmlElemAttrRequired1(BUTTON)    {VALUE=}
  246. set htmlElemAttrOptional1(BUTTON)    {NAME=}
  247. set htmlElemEventHandler1(BUTTON)    {onClick= onMouseDown= onMouseUp=}
  248. htmlSetAttrUsed ""     BUTTON    {VALUE= NAME=}
  249. set htmlElemAttrRequired1(RADIO)    {NAME= VALUE=}
  250. set htmlElemAttrOptional1(RADIO)    {CHECKED}
  251. set htmlElemEventHandler1(RADIO)    {onClick=}
  252. htmlSetAttrUsed ""     RADIO    {NAME= VALUE= CHECKED}
  253. set htmlElemAttrOptional1(SUBMIT)    {NAME= VALUE=}
  254. set htmlElemEventHandler1(SUBMIT)    {onClick=}
  255. htmlSetAttrUsed ""     SUBMIT    {VALUE= }
  256. set htmlElemAttrOptional1(RESET)    {VALUE= }
  257. set htmlElemEventHandler1(RESET)    {onClick=}
  258. htmlSetAttrUsed ""     RESET    {VALUE= }
  259. set htmlElemAttrRequired1(PASSWORD)    {NAME= }
  260. set htmlElemAttrOptional1(PASSWORD)    {VALUE= SIZE= MAXLENGTH=}
  261. set htmlElemAttrNumber1(PASSWORD)    {SIZE=1:i:n MAXLENGTH=1:i:n}
  262. set htmlElemEventHandler1(PASSWORD)    {onBlur= onChange= onFocus= onSelect= onKeyDown= onKeyPress= onKeyUp=}
  263. htmlSetAttrUsed ""     PASSWORD    {NAME= VALUE= SIZE= MAXLENGTH=}
  264. set htmlElemAttrRequired1(HIDDEN)    {NAME= VALUE=}
  265. set htmlElemAttrOptional1(HIDDEN)    {}
  266. set htmlElemAttrRequired1(IMAGE)    {NAME= SRC=}
  267. set htmlElemAttrOptional1(IMAGE)    {ALIGN=}
  268. set htmlElemAttrChoices1(IMAGE)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  269. ALIGN=LEFT ALIGN=RIGHT}
  270. set htmlElemAttrRequired1(FILE)    {NAME= }
  271. set htmlElemAttrOptional1(FILE)    {SIZE= MAXLENGTH=}
  272. set htmlElemAttrNumber1(FILE)    {SIZE=1:i:n MAXLENGTH=1:i:n}
  273. set htmlElemAttrRequired1(SELECT)    {NAME= }
  274. set htmlElemAttrOptional1(SELECT)    {SIZE= MULTIPLE}
  275. set htmlElemAttrNumber1(SELECT)    {SIZE=1:i:n}
  276. set htmlElemEventHandler1(SELECT)    {onBlur= onChange= onFocus=}
  277. htmlSetAttrUsed ""        SELECT    {NAME= SIZE= MULTIPLE}
  278. set htmlElemAttrOptional1(OPTION)    {VALUE= SELECTED}
  279. htmlSetAttrUsed ""        OPTION    {SELECTED}
  280. set htmlElemAttrRequired1(TEXTAREA)    {NAME= ROWS= COLS=}
  281. set htmlElemAttrOptional1(TEXTAREA)    {WRAP=}
  282. set htmlElemAttrNumber1(TEXTAREA)    {ROWS=1:i:n COLS=1:i:n}
  283. set htmlElemAttrChoices1(TEXTAREA) {WRAP=VIRTUAL WRAP=PHYSICAL WRAP=OFF}
  284. set htmlElemEventHandler1(TEXTAREA)    {onBlur= onChange= onFocus= onSelect= onKeyDown= onKeyPress= onKeyUp=}
  285. set htmlElemHideNetscape(TEXTAREA) {WRAP=}
  286. htmlSetAttrUsed "" TEXTAREA {NAME= ROWS= COLS=}
  287. set htmlElemAttrRequired1(KEYGEN) {NAME=}
  288. set htmlElemAttrOptional1(KEYGEN) {CHALLENGE=}
  289. htmlSetAttrUsed "" KEYGEN {NAME=}
  290.  
  291. set htmlElemAttrOptional1(TABLE)    {BORDER= CELLSPACING= CELLPADDING= COLS= WIDTH= HEIGHT=
  292. ALIGN= BGCOLOR= BORDERCOLOR= BORDERCOLORDARK= BORDERCOLORLIGHT= BACKGROUND= FRAME= RULES=}
  293. set htmlElemAttrChoices1(TABLE)    {ALIGN=LEFT ALIGN=CENTER ALIGN=RIGHT FRAME=BORDER
  294. FRAME=VOID FRAME=ABOVE FRAME=BELOW FRAME=HSIDES FRAME=VSIDES FRAME=LHS FRAME=RHS FRAME=BOX
  295. RULES=GROUPS RULES=ROWS RULES=COLS RULES=ALL RULES=NONE}
  296. set htmlElemAttrNumber1(TABLE)    {BORDER=0:i:n CELLSPACING=0:i:n COLS=1:i:n
  297. CELLPADDING=0:i:n WIDTH=1:i:% HEIGHT=1:i:%}
  298. htmlSetAttrUsed ""     TABLE    {BORDER= CELLSPACING= CELLPADDING=}
  299. set htmlElemHideIE(TABLE) {BORDERCOLORDARK= BORDERCOLORLIGHT=}
  300. set htmlElemAttrOptional1(TD)    {ALIGN= VALIGN= COLSPAN= ROWSPAN= WIDTH= HEIGHT= NOWRAP
  301. BGCOLOR= BORDERCOLOR= BORDERCOLORDARK= BORDERCOLORLIGHT= BACKGROUND=}
  302. set htmlElemAttrChoices1(TD)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT 
  303. VALIGN=BASELINE VALIGN=BOTTOM VALIGN=MIDDLE VALIGN=TOP }
  304. set htmlElemAttrNumber1(TD)    {COLSPAN=1:i:n ROWSPAN=1:i:n WIDTH=1:i:% HEIGHT=1:i:n}
  305. htmlSetAttrUsed ""     TD    {ALIGN= VALIGN= COLSPAN= ROWSPAN= NOWRAP}
  306. set htmlElemHideIE(TD) {BORDERCOLOR= BORDERCOLORDARK= BORDERCOLORLIGHT=}
  307. set htmlElemAttrOptional1(TH)    {ALIGN= VALIGN= COLSPAN= ROWSPAN= WIDTH= HEIGHT= NOWRAP
  308. BGCOLOR= BORDERCOLOR= BORDERCOLORDARK= BORDERCOLORLIGHT= BACKGROUND=}
  309. set htmlElemAttrChoices1(TH)    {ALIGN=LEFT ALIGN=CENTER ALIGN=RIGHT 
  310. VALIGN=BASELINE VALIGN=BOTTOM VALIGN=MIDDLE VALIGN=TOP }
  311. set htmlElemAttrNumber1(TH)    {COLSPAN=1:i:n ROWSPAN=1:i:n WIDTH=1:i:% HEIGHT=1:i:n}
  312. htmlSetAttrUsed ""     TH    {ALIGN= VALIGN= COLSPAN= ROWSPAN= NOWRAP }
  313. set htmlElemHideIE(TH) {BORDERCOLOR= BORDERCOLORDARK= BORDERCOLORLIGHT=}
  314. set htmlElemAttrOptional1(TR)    {ALIGN= VALIGN= BGCOLOR= BORDERCOLOR= BORDERCOLORDARK=
  315. BORDERCOLORLIGHT= BACKGROUND=}
  316. set htmlElemAttrChoices1(TR)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT  
  317. VALIGN=BASELINE VALIGN=BOTTOM VALIGN=MIDDLE VALIGN=TOP }
  318. htmlSetAttrUsed ""        TR    {ALIGN= VALIGN=}
  319. set htmlElemHideIE(TR) {BORDERCOLOR= BORDERCOLORDARK= BORDERCOLORLIGHT=}
  320. set htmlElemHideNetscape(TR) {BACKGROUND=}
  321. set htmlElemAttrOptional1(CAPTION)    {ALIGN=}
  322. set htmlElemAttrChoices1(CAPTION)    {ALIGN=BOTTOM ALIGN=TOP }
  323. htmlSetAttrUsed ""     CAPTION    {ALIGN=}
  324. set htmlElemAttrOptional1(COL)    {SPAN= ALIGN=}
  325. set htmlElemAttrNumber1(COL)    {SPAN=1:i:n}
  326. set htmlElemAttrChoices1(COL) {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  327. htmlSetAttrUsed "" COL {SPAN= ALIGN=}
  328. set htmlElemAttrOptional1(COLGROUP)    {SPAN= ALIGN=}
  329. set htmlElemAttrNumber1(COLGROUP)    {SPAN=1:i:n}
  330. set htmlElemAttrChoices1(COLGROUP) {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  331. htmlSetAttrUsed "" COLGROUP {SPAN= ALIGN=}
  332. set htmlElemAttrOptional1(THEAD) {}
  333. set htmlElemAttrOptional1(TBODY) {}
  334. set htmlElemAttrOptional1(TFOOT) {}
  335.  
  336. set htmlElemAttrOptional1(FRAMESET) {ROWS= COLS= FRAMEBORDER= BORDER= BORDERCOLOR= FRAMESPACING=}
  337. set htmlElemAttrNumber1(FRAMESET)    {BORDER=0:i:n FRAMESPACING=0:i:n}
  338. set htmlElemAttrChoices1(FRAMESET)    {FRAMEBORDER=YES FRAMEBORDER=NO}
  339. set htmlElemEventHandler1(FRAMESET)    {onLoad= onUnload=}
  340. htmlSetAttrUsed ""        FRAMESET {ROWS= COLS=}
  341. set htmlElemHideNetscape(FRAMESET) {BORDER= BORDERCOLOR=}
  342. set htmlElemHideIE(FRAMESET) {FRAMESPACING=}
  343. set htmlElemAttrRequired1(FRAME)    {SRC=}
  344. set htmlElemAttrOptional1(FRAME)    {NAME= MARGINWIDTH= MARGINHEIGHT= SCROLLING=
  345. NORESIZE FRAMEBORDER= BORDERCOLOR=}
  346. set htmlElemAttrChoices1(FRAME)    {SCROLLING=YES SCROLLING=NO SCROLLING=AUTO 
  347. FRAMEBORDER=YES FRAMEBORDER=NO}
  348. set htmlElemAttrNumber1(FRAME)    {MARGINWIDTH=1:i:n MARGINHEIGHT=1:i:n}
  349. htmlSetAttrUsed ""        FRAME    {SRC= NAME= }
  350. set htmlElemHideNetscape(FRAME) {BORDERCOLOR=}
  351. set htmlElemAttrOptional1(NOFRAMES) {}
  352. set htmlElemAttrRequired1(IFRAME) {SRC= WIDTH= HEIGHT=}
  353. set htmlElemAttrOptional1(IFRAME) {NAME= MARGINWIDTH= MARGINHEIGHT= SCROLLING= ALIGN=}
  354. set htmlElemAttrNumber1(IFRAME)    {WIDTH=1:i:n HEIGHT=1:i:n MARGINWIDTH=1:i:n MARGINHEIGHT=1:i:n}
  355. set htmlElemAttrChoices1(IFRAME) {SCROLLING=YES SCROLLING=NO SCROLLING=AUTO ALIGN=TOP 
  356. ALIGN=MIDDLE ALIGN=BOTTOM ALIGN=LEFT ALIGN=RIGHT}
  357. htmlSetAttrUsed "" IFRAME {SRC= WIDTH= HEIGHT= NAME= ALIGN=}
  358.  
  359. set htmlElemAttrRequired1(MAP)        {NAME=}
  360. set htmlElemAttrOptional1(MAP)        {}
  361. set htmlElemAttrRequired1(AREA) {ALT=}
  362. set htmlElemAttrOptional1(AREA)    {SHAPE= COORDS= TARGET= HREF= NOHREF}
  363. set htmlElemAttrChoices1(AREA)    {SHAPE=RECT SHAPE=CIRCLE SHAPE=POLY
  364. SHAPE=DEFAULT}
  365. set htmlElemEventHandler1(AREA)    {onClick= onMouseOver= onMouseOut=}
  366. htmlSetAttrUsed ""        AREA    {SHAPE= COORDS= HREF= NOHREF}
  367.  
  368. set htmlElemAttrRequired1(APPLET)    {CODE= WIDTH= HEIGHT=}
  369. set htmlElemAttrOptional1(APPLET)     {CODEBASE= ARCHIVE= HSPACE= VSPACE= ALIGN= NAME= ALT=
  370. MAYSCRIPT}
  371. set htmlElemAttrChoices1(APPLET)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  372. ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE
  373. ALIGN=BASELINE}
  374. set htmlElemAttrNumber1(APPLET)     {VSPACE=0:i:n HSPACE=0:i:n WIDTH=1:i:n
  375. HEIGHT=1:i:n}
  376. htmlSetAttrUsed ""        APPLET    {CODE= WIDTH= HEIGHT= CODEBASE= ALIGN= }
  377. set htmlElemHideNetscape(APPLET) {MAYSCRIPT}
  378. set htmlElemAttrRequired1(PARAM)    {NAME= VALUE=}
  379. set htmlElemAttrOptional1(PARAM)    {TYPE= VALUETYPE=}
  380. set htmlElemAttrChoices1(PARAM) {VALUETYPE=REF VALUETYPE=OBJECT VALUETYPE=DATA}
  381. set htmlElemAttrOptional1(SCRIPT)    {LANGUAGE= ARCHIVE= SRC=}
  382. htmlSetAttrUsed ""        SCRIPT    {LANGUAGE=}
  383. set htmlElemHideNetscape(SCRIPT) {ARCHIVE=}
  384. set htmlElemAttrOptional1(NOSCRIPT) {}
  385.  
  386. set htmlElemAttrOptional1(LAYER) {LEFT= TOP= PAGEX= PAGEY= SRC= WIDTH= HEIGHT= CLIP= Z-INDEX=
  387. ABOVE= BELOW= VISIBILITY= BGCOLOR= BACKGROUND=}
  388. set htmlElemAttrChoices1(LAYER) {VISIBILITY=SHOW VISIBILITY=HIDDEN VISIBILITY=INHERIT}
  389. set htmlElemAttrNumber1(LAYER) {LEFT=-i:i:n TOP=-i:i:n PAGEX=0:i:n PAGEY=0:i:n WIDTH=1:i:%
  390. HEIGHT=1:i:% Z-INDEX=1:i:n}
  391. htmlSetAttrUsed "" LAYER {LEFT= TOP= SRC= WIDTH= HEIGHT= VISIBILITY=}
  392. set htmlElemEventHandler1(LAYER) {onMouseOver= onMouseOut= onLoad=}
  393. set htmlElemAttrOptional1(ILAYER) {LEFT= TOP= PAGEX= PAGEY= SRC= WIDTH= HEIGHT= CLIP= Z-INDEX=
  394. ABOVE= BELOW= VISIBILITY= BGCOLOR= BACKGROUND=}
  395. set htmlElemAttrChoices1(ILAYER) {VISIBILITY=SHOW VISIBILITY=HIDDEN VISIBILITY=INHERIT}
  396. set htmlElemAttrNumber1(ILAYER) {LEFT=-i:i:n TOP=-i:i:n PAGEX=0:i:n PAGEY=0:i:n WIDTH=1:i:%
  397. HEIGHT=1:i:% Z-INDEX=1:i:n}
  398. htmlSetAttrUsed "" ILAYER {LEFT= TOP= SRC= WIDTH= HEIGHT= VISIBILITY=}
  399. set htmlElemEventHandler1(ILAYER) {onMouseOver= onMouseOut= onLoad=}
  400. set htmlElemAttrOptional1(NOLAYER) {}
  401.  
  402. set htmlElemAttrOptional1(BASE)    {HREF= TARGET=}
  403. htmlSetAttrUsed ""        BASE    {HREF= }
  404. set htmlElemAttrOptional1(ISINDEX)    {ACTION= PROMPT=}
  405. set htmlElemAttrOptional1(LINK)    {HREF=  REL= REV= TITLE= TYPE=}
  406. htmlSetAttrUsed ""        LINK    {HREF=}
  407. set htmlElemAttrRequired1(META)    {CONTENT=}
  408. set htmlElemAttrOptional1(META)    {NAME= HTTP-EQUIV=}
  409.  
  410. # Add style sheet attrs, CLASS, ID, STYLE.
  411. set tmpNoStyle {BASE BASEFONT FRAME FRAMESET HEAD HTML IFRAME
  412. META PARAM SCRIPT STYLE TITLE WBR BGSOUND KEYGEN}
  413. foreach tmp [array names htmlElemAttrOptional1] {
  414.     if {[lsearch -exact $tmpNoStyle $tmp] < 0} {
  415.         lappend htmlElemAttrOptional1($tmp) CLASS= ID= STYLE=
  416.     }
  417. }
  418.  
  419. unset tmp tmpNoStyle
  420.  
  421. proc htmlCheckConfig1 {} {
  422.     
  423.     upvar mayContain mayContain empty empty closingOptional closingOptional form form
  424.     
  425.     set headmisc {SCRIPT STYLE META LINK}
  426.     set headContent {TITLE ISINDEX BASE BGSOUND}
  427.     set heading {H1 H2 H3 H4 H5 H6}
  428.     set lists {UL OL DIR MENU}
  429.     set preformatted {PRE}
  430.     set font {TT I B U STRIKE BIG SMALL SUB SUP BLINK}
  431.     set phrase {EM STRONG DFN CODE SAMP KBD VAR CITE}
  432.     set special {A IMG APPLET OBJECT FONT BASEFONT BR SCRIPT MAP SPAN IFRAME SPACER ILAYER MARQUEE EMBED NOBR}
  433.     set form {INPUT SELECT TEXTAREA KEYGEN}
  434.     set text [concat text $font $phrase $special $form]
  435.     set block [concat P $lists $preformatted DL DIV CENTER NOSCRIPT NOFRAMES NOEMBED NOLAYER MULTICOL LAYER BLOCKQUOTE FORM ISINDEX HR TABLE]
  436.     set flow [concat $text $block]
  437.     set bodyContent [concat $heading $text $block ADDRESS]
  438.     
  439.     # Empty elements
  440.     set empty {BASEFONT BR AREA LINK IMG PARAM HR INPUT ISINDEX BASE META COL FRAME SPACER WBR EMBED BGSOUND KEYGEN}
  441.     
  442.     # Define what each element mayContain contain
  443.     foreach i [concat $font $phrase FONT A P $heading PRE DT CAPTION SPAN] {
  444.         set mayContain($i) $text
  445.     }
  446.     set mayContain(A) [lreplace $mayContain(A) [set where [lsearch -exact $mayContain(A) A]] $where]
  447.     
  448.     set preExclusion {IMG BIG SMALL SUB SUP FONT}
  449.     foreach i $preExclusion {
  450.         set where [lsearch -exact $mayContain(PRE) $i]
  451.         set mayContain(PRE) [lreplace $mayContain(PRE) $where $where]
  452.     }
  453.     
  454.     foreach i {BODY DIV CENTER BLOCKQUOTE FORM TH TD IFRAME NOSCRIPT NOEMBED NOLAYER LAYER ILAYER MULTICOL MARQUEE} {
  455.         set mayContain($i) $bodyContent
  456.     }
  457.     set mayContain(FORM) [lreplace $mayContain(FORM) [set where [lsearch -exact $mayContain(FORM) FORM]] $where]
  458.     set mayContain(NOFRAMES) [concat BODY $bodyContent]
  459.     set mayContain(ADDRESS) [concat $text P]
  460.     set mayContain(MAP) AREA
  461.     set mayContain(APPLET) [concat $text PARAM]
  462.     set mayContain(OBJECT) [concat $bodyContent PARAM]
  463.     set mayContain(DL) {DT DD}
  464.     set mayContain(DD) $flow
  465.     set mayContain(LI) $flow
  466.     foreach i $lists {
  467.         set mayContain($i) LI
  468.     }
  469.     set mayContain(NOBR) [concat $text WBR]
  470.     set mayContain(SELECT) OPTION
  471.     set mayContain(OPTION) text
  472.     set mayContain(TEXTAREA) text
  473.     set mayContain(TABLE) {CAPTION COL COLGROUP THEAD TBODY TFOOT}
  474.     set mayContain(COLGROUP) COL
  475.     set mayContain(TBODY) TR
  476.     set mayContain(THEAD) TR
  477.     set mayContain(TFOOT) TR
  478.     set mayContain(TR) {TD TH}
  479.     set mayContain(FRAMESET) {FRAMESET FRAME}
  480.     set mayContain(HEAD) [concat $headContent $headmisc]
  481.     set mayContain(SCRIPT) text
  482.     set mayContain(STYLE) text
  483.     set mayContain(TITLE) text
  484.     set mayContain(HTML) {HEAD FRAMESET BODY}
  485.     # Dummy tag to start with.
  486.     set mayContain(WINDOW) HTML
  487.     
  488.     # These have an optional closing tag.
  489.     set closingOptional {P DT DD LI OPTION TR TD TH HEAD BODY HTML COLGROUP THEAD TBODY TFOOT WINDOW}
  490. }
  491.